package com.common.util;

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.regex.Pattern;

/**
 * 对数据进行校验，并封装错误信息工具类--用于设备与位置导入
 * @author  sun
 * @date 2018-02-07 17:55
 */
public class CheckUtil {

    /**
     * 不能
     * @param
     * @param index
     * @param val
     * @param fieldName
     * @param len
     */
    public static void notNullAndMaxLimit(List<String> errorMsgs, int index, String val, String fieldName, int len){
        if(StringUtil.isEmpty(val) || val.length() > len){
            errorMsgs.add("第" + index + "行：" + fieldName + "不能为空并且不能超过" +  len +"位");
        }
    }

    /**
     *
     * @param errorMsgs
     * @param index
     * @param val
     * @param fieldName
     *
     */
    public static void notNull(List<String> errorMsgs, int index, String val, String fieldName){
        if(StringUtil.isEmpty(val)){
            errorMsgs.add("第" + index + "行：" + fieldName + "不能为空");
        }
    }


    public static void notNullAndIsNumber(List<String> errorMsgs, int index, String val, String fieldName){
        String reg = "^[0-9]*$";
        if(StringUtil.isEmpty(val)){
            errorMsgs.add("第" + index + "行：" + fieldName + "不能为空");
        }else if(!val.matches(reg)){
            errorMsgs.add("第" + index + "行：" + fieldName + "只能由数字组成");
        }
    }

    public static void notNullAndIsNumber(List<String> errorMsgs, int index, String val, String fieldName,int len){
        String reg = "^[0-9]{1," + len + "}$";
        if(StringUtil.isEmpty(val)){
            errorMsgs.add("第" + index + "行：" + fieldName + "不能为空");
        }else if(!val.matches(reg)){
            errorMsgs.add("第" + index + "行：" + fieldName + "只能由数字组成,并且不能超过" + len + "位");
        }
    }

    /**
     * 如果字符串只由字母和数字组成。返回true<br>
     *     匹配正则^[0-9A-Za-z]*$
     * @param val
     * @return
     */
    public static boolean isWord(String val){
        String reg = "^[0-9A-Za-z-]*$";
        return val.matches(reg);
    }

    /**
     * 验证字段是否由字母,数字, -，并自动添加错误信息
     * @param errorMsgs
     * @param index
     * @param val
     * @param explan
     */
    public static void checkWord(List errorMsgs, int index, String val, String explan){
        if(StringUtil.isEmpty(val) || !isWord(val)){
            errorMsgs.add("第" + index + "行：" + explan + "只能由字母、-、数字组成");
        }
    }

    /**
     * 判断时间格式 格式必须为“YYYY-MM-dd”
     * 2004-2-30 是无效的
     * 2003-2-29 是无效的
     * @param sDate
     * @return
     */
    public static boolean isLegalDate(String sDate) {
        int legalLen = 10;
        if ((sDate == null) || (sDate.length() != legalLen)) {
            return false;
        }
        DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
        try {
            Date date = formatter.parse(sDate);
            return sDate.equals(formatter.format(date));
        } catch (Exception e) {
            return false;
        }
    }

    /**
     * 判断时间格式 格式必须为“YYYY-MM-dd”并且不能为空
     * 2004-2-30 是无效的
     * 2003-2-29 是无效的
     * @param sDate
     * @return
     */
    public static void notNullAndIsLegalDate(List errorMsgs, int index, String sDate, String explan) {
        if(StringUtil.isEmpty(sDate)){
            errorMsgs.add("第" + index + "行：" + explan + "不能为空");
        }else if(!isLegalDate(sDate)){
            errorMsgs.add("第" + index + "行：" + explan + "格式必须为yyyy-MM-dd");
        }
    }

}
